package dyyx;

public class Util {
	
	
	
	public static double kurtosis(double[]values){
		return kurtosis(values,true);
	}

	public static double kurtosis(double[]values,boolean sample){
		// 四阶中心距与标准差的四次幂之比
		// 标准差的四次幂 就是 方差的平方
		// 方差 就是 二阶中心距
		double v1 = Util.centreDistance(values, 4,sample); 
		double v2 =  Math.pow(Util.centreDistance(values, 2,sample), 2);
		return v1/v2;
	}
	
	
	public static double mean(double[]values){
		if(values==null || values.length<=0){
			return 0;
		}
		int num = values.length;
		double sum = 0;
		for(double item:values){
			sum = sum + item;
		}	
		return sum / num;
	}
	
	
	// n阶 中心距   N-order centre distance 
	
    /**
     * 
     * @param values
     * @param n 
     * @param sample   true  分母为 样本数-1  ,false  分母为 样本数
     * @return
     */
	public static double centreDistance(double[]values,int n,boolean sample){
		double mean = mean(values);
		double sum = 0;
		for(double item:values){
			sum = sum + Math.pow(item - mean, n);
		}
		int tmp = values.length;
		if(sample){
			tmp = tmp - 1;
		}
		return sum / tmp;
	}
	
	public static double centreDistance(double[]values,int n){
		return  centreDistance(values,n,true);
	}

	
	
	
}
